/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */

 function copyTree(node1,node2,val){
    if(node1.left){
        node2.left=new TreeNode(val);
        copyTree(node1.left,node2.left,val);
    }
    if(node1.right){
        node2.right=new TreeNode(val);
        copyTree(node1.right,node2.right,val);
    }
}

function treeDP(node1,node2){
    if(!node1){
        return 
    }
    treeDP(node1.left,node2.left);
    treeDP(node1.right,node2.right);
    node1.val+=node2.left ? node2.left.val:0;
    node1.val+=node2.right ? node2.right.val:0;
    node2.val=node1.left ? Math.max(node1.left.val,node2.left.val):0;
    node2.val+=node1.right ? Math.max(node1.right.val,node2.right.val):0;
}

var rob = function(root) {
    if(!root){
        return 0;
    }
    let dp=new TreeNode(root.val);
    copyTree(root,dp,0);
    treeDP(root,dp);
    return Math.max(root.val,dp.val)
};
// 执行用时：
// 92 ms
// , 在所有 JavaScript 提交中击败了
// 89.76%
// 的用户
// 内存消耗：
// 42.5 MB
// , 在所有 JavaScript 提交中击败了
// 52.52%
// 的用户


